package hotel.switchs.oversea.online.service;

import hotel.base.oversea.entity.SwitchHotelActiveTagEntity;
import hotel.base.oversea.entity.SwitchPriceBaseSetEntity;
import hotel.base.oversea.service.BaseService;
import hotel.base.oversea.utils.Result;
import hotel.base.oversea.vo.BatchPushRoomDatasVo;
import hotel.base.oversea.vo.meituan.response.goods.MtfpHotelGoodsCancelRuleVo;
import hotel.switchs.oversea.api.VO.request.*;

import java.util.List;
import java.util.Map;

/**
 * @Author lmf
 * @Date 2020/6/17 17:32
 **/
public interface SwitchPushRoomService extends BaseService {
    /**
     * 直连推送报价 房价 房态 房量
     *
     * @param hotelId
     * @param basicRoomTypeId
     * @return
     */
    Result<Object> pushRoomData(int hotelId, int basicRoomTypeId, int genre);

    /***
    * @Author: lmf
    * @Date: 2020/12/17
     * 直接推送取消规则
    */
    Result<Object> pushRoomDataByCancel(int hotelId, int basicRoomTypeId, int genre);

    /**
     * 直连推送报价 房价 房态 房量
     * @param hotelId
     * @param basicRoomTypeId
     */
    Result<Object> retryPushRoomData(int hotelId, int basicRoomTypeId, int genre);

    /**
     * 直连推送报价 房价 房态 房量
     */
    Result<Object> pushAllRoomData(int hotelId, int[] basicRoomTypeId);

    /**
     * 推送价格查询
     * @param logKey
     * @param type
     * @return
     */
    Result<Object> getPushRoomDataLog(String logKey, int type);
    /**
     * 下单前效验是否价格发生变化
     * @param validPriceVo
     * @return
     */
    Result<Object> validStatus(ValidPriceVo validPriceVo) throws Exception;
    /**
     * 获取可以推送的房型id
     * page 分页获取
     * @return
     * @param page
     */
    Result<Map<Integer, Object>> getCanPushRoomList(int page);

    /**
     * 更新库存
     * @param modifyRemainVo
     * @return
     */
    Result<Object> modifyRemain(ModifyRemainVo modifyRemainVo) throws Exception;

    /**
     * 更新价格
     * @param modifyPriceVo
     * @return
     */
    Result<Object> modifyPrice(ModifyPriceVo modifyPriceVo) throws Exception;

    /**
     * 更新房态
     * @param modifyStatusVo
     * @return
     */
    Result<Object> modifyStaus(ModifyStatusVo modifyStatusVo);


    /**
     * 效验是否可以接单
     * @param canAcceptVo
     * @return
     */
    Result<Object> isCanAccept(CanAcceptVo canAcceptVo);

    /**
     * 批量修改价格
     * @param modifyPriceListVo
     * @return
     */
  //  Result<Object> modifyPrices(ModifyPriceListVo modifyPriceListVo) throws InvocationTargetException, IllegalAccessException;

    /**
     * @author: lmf
     * @date: 2020/9/3 16:33
     * 推送参与价格标签的酒店id
     */
    Result<Object> pushActiveTagPrice(Integer key, List<Integer> value);
    /**
     * @author: lmf
     * @date: 2020/9/8 14:11
     * 多线程推送房态房量推送数据
     */
    Result<Object> pushDataByThead();
    /**
     * @author: lmf
     * @date: 2020/9/14 16:57
     * 根据最新的配置重新推送价格
     */
    Result<Object> pushRoomPriceByNewRate();
    /***
    * @Author: lmf
    * @Date: 2020/9/22
     * 为指定的售卖房型重新推送价格和房态
    */
    Result<Object> pushBySpecial();
    /**
     * 获取酒店上架价格配置
     */
    Map<String, List<SwitchPriceBaseSetEntity>> getOnlinePriceSet();

    /**
     * 是否参与天天特价活动，如果参与价格增加
     * @param priceSetMap
     * @param salePrice
     * @param subPrice
     * @param switchHotelActiveTagEntity
     * @return
     */
    Map<String, Object> getPriceV2(Map<String, List<SwitchPriceBaseSetEntity>> priceSetMap, Integer salePrice, Integer subPrice, SwitchHotelActiveTagEntity switchHotelActiveTagEntity);
    /**
     * @author: lmf
     * @date: 2020/8/6 18:35
     * 美团价格 库存 房态 异步通知 携程做对应变更
     */
    Result<Object> notityModifyRoomInfo(BatchPushRoomDatasVo batchPushRoomDatasVo);
    /**
     *
     * @author: lmf
     * @time: 2020/10/29 16:27
     * 初始化房型库存为1
     */
    Result<Object> initRoomNum();
    /***
    * @Author: lmf
    * @Date: 2020/12/30
     * 更新取消规则
    */
    Result<Object> pushRoomCancelRule(List<MtfpHotelGoodsCancelRuleVo> mtfpHotelGoodsCancelRuleVos);
}
